package com.zenithmind.classroom.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zenithmind.common.result.PageResult;
import com.zenithmind.classroom.pojo.dto.ChapterCreateDTO;
import com.zenithmind.classroom.pojo.dto.ChapterUpdateDTO;
import com.zenithmind.classroom.pojo.dto.ChapterQueryDTO;
import com.zenithmind.classroom.pojo.domain.CourseChapter;
import com.zenithmind.classroom.pojo.vo.ChapterVO;

import java.util.List;

/**
 * 课程章节服务接口
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
public interface CourseChapterService extends IService<CourseChapter> {

    /**
     * 创建章节
     * 
     * @param createDTO 创建DTO
     * @return 章节VO
     */
    ChapterVO createChapter(ChapterCreateDTO createDTO);

    /**
     * 更新章节
     * 
     * @param id 章节ID
     * @param updateDTO 更新DTO
     * @return 是否成功
     */
    Boolean updateChapter(String id, ChapterUpdateDTO updateDTO);

    /**
     * 删除章节
     * 
     * @param id 章节ID
     * @return 是否成功
     */
    Boolean deleteChapter(String id);

    /**
     * 发布章节
     * 
     * @param id 章节ID
     * @return 是否成功
     */
    Boolean publishChapter(String id);

    /**
     * 获取课程章节列表
     * 
     * @param courseId 课程ID
     * @param includeUnpublished 是否包含未发布
     * @return 章节列表
     */
    List<ChapterVO> getCourseChapters(String courseId, Boolean includeUnpublished);

    /**
     * 获取章节详情
     * 
     * @param id 章节ID
     * @param userId 用户ID
     * @return 章节详情
     */
    ChapterVO getChapterDetail(String id, String userId);

    /**
     * 调整章节顺序
     * 
     * @param courseId 课程ID
     * @param chapterIds 章节ID列表（按新顺序）
     * @return 是否成功
     */
    Boolean reorderChapters(String courseId, List<String> chapterIds);

    /**
     * 复制章节
     * 
     * @param chapterId 源章节ID
     * @param targetCourseId 目标课程ID
     * @param title 新章节标题
     * @return 新章节VO
     */
    ChapterVO copyChapter(String chapterId, String targetCourseId, String title);

    /**
     * 批量创建章节
     * 
     * @param chapters 章节列表
     * @return 创建成功数量
     */
    Integer batchCreateChapters(List<ChapterCreateDTO> chapters);

    /**
     * 获取章节学习进度
     *
     * @param chapterId 章节ID
     * @param userId 用户ID
     * @return 进度百分比
     */
    Integer getChapterProgress(String chapterId, String userId);

    /**
     * 下架章节
     *
     * @param id 章节ID
     * @return 是否成功
     */
    Boolean unpublishChapter(String id);

    /**
     * 分页查询章节
     *
     * @param queryDTO 查询参数
     * @return 分页结果
     */
    PageResult<ChapterVO> getChapterPage(ChapterQueryDTO queryDTO);

    /**
     * 获取课程章节列表（带用户进度）
     *
     * @param courseId 课程ID
     * @param userId 用户ID
     * @param includeUnpublished 是否包含未发布
     * @return 章节列表
     */
    List<ChapterVO> getCourseChapters(String courseId, String userId, Boolean includeUnpublished);

    /**
     * 移动章节
     *
     * @param id 章节ID
     * @param targetCourseId 目标课程ID
     * @param sortOrder 排序值
     * @return 是否成功
     */
    Boolean moveChapter(String id, String targetCourseId, Integer sortOrder);

    /**
     * 获取章节统计
     *
     * @param id 章节ID
     * @return 统计信息
     */
    Object getChapterStatistics(String id);

    /**
     * 更新章节统计
     *
     * @param id 章节ID
     * @return 是否成功
     */
    Boolean updateChapterStatistics(String id);

    /**
     * 批量导入章节
     *
     * @param chapters 章节列表
     * @return 导入成功数量
     */
    Integer batchImportChapters(List<ChapterCreateDTO> chapters);

    /**
     * 导出章节
     *
     * @param chapterIds 章节ID列表
     * @return 章节列表
     */
    List<ChapterVO> exportChapters(List<String> chapterIds);
}
